import numpy as np
# 类也是一个对象!  类就是一个用来创建对象的对象! (对象：id,type,value)(类的type就是type)


# （1）定义一个类：class 类名( [可选的父类] ):
class Test():
    pass
print(Test) # 打印Test类：<class '__main__.Test'> （表示：当前主文件：__main__，下的Test类）

# （2）创建一个类:使用类来创建对象，就像调用一个函数一样.此时test就是Test类的一个实例
test = Test()
print(test)  # 打印Test类的实例test：<__main__.Test object at 0x000001ECAFB44520>

# (3) isinstance()用来检查一个对象是否是一个类的实例
print(isinstance(test,Test))

# (4) 类的对象信息
print("id: ",id(Test)," typr: ",type(Test))

# (4) 类添加变量：对象.属性名 = 属性值



######################################################################################################

# 类中定义方法
# 类方方法，必须默认有一个参数self，表示调用方法的类的本身 （函数的函数，正常参考java）
# 函数可以直接使用，方法必须通过对象调用
class Test():

    # __方法名__: 类的构造器
    # 初始化属性，
    def __init__(self):
        self.name = '小明'
        self.age = 18
    # def __init__(self，参数1):  参数1为构造类的对象时，传给类的参数，≈ 构造器的参数（Test（参数1））
    #     pass

    # __str__()。这个特殊方法会在,尝试将对象转换为字符串,的时候调用（注意是尝试，默认情况下。显示调用：print(str（test）)
    # 技巧：一行代码打印对象，可以封装自己想要打印的信息
    def __str__(self):
        return 'Test [name=%s , age=%d]'%( self.name , self.age)

    def fun(self,a):
        List = np.array(range(a));
        print(List)

test = Test()  # 执行流程：1.创建一个变量  2.在内存中创建一个新对象   3.__init__(self)方法执行    4.将对象的id赋值给变量
print(test)




